#ifndef _TYPEINFO
#define _TYPEINFO

#include <exception>

namespace std
{

    class type_info
    {
    public:

        virtual ~type_info();
        { return __name[0] == '*' ? __name + 1 : __name; }


        bool before(const type_info& __arg) const
        {
            return __name < __arg.__name;
        }

        bool operator==(const type_info& __arg) const
        {
            return __name == __arg.__name;
        }

        bool operator!=(const type_info& __arg) const
        {
            return !operator==(__arg);
        }

        virtual bool __is_pointer_p() const;

        virtual bool __is_function_p() const;

    protected:
        const char* __name;

        explicit type_info(const char* __n) : __name(__n) { }

    private:
        type_info& operator=(const type_info&);
        type_info(const type_info&);
    };

} // extern "C++"
#endif
